package com.wuxinwudai.android.javaext;

/**
 * Tuple9 类用于构建一个九元的元组
 * @author 吾心无待 于 2016年03月12日
 */
public class Tuple9<A,B,C,D,E,F,G,H,I> {
    private final A a;
    private final B b;
    private final C c;
    private final D d;
    private final E e;
    private final F f;
    private final G g;
    private final H h;
    private final I i;

    /**
     * 获取 A 元素
     * @return 返回 A 元素
     */
    public A getA() {
        return a;
    }
    /**
     * 获取 B 元素
     * @return 返回 B 元素
     */
    public B getB() {
        return b;
    }
    /**
     * 获取 C 元素
     * @return 返回 C 元素
     */
    public C getC() {
        return c;
    }
    /**
     * 获取 D 元素
     * @return 返回 D 元素
     */
    public D getD() {
        return d;
    }
    /**
     * 获取 E 元素
     * @return 返回 E 元素
     */
    public E getE() {
        return e;
    }
    /**
     * 获取 F 元素
     * @return 返回 F 元素
     */
    public F getF() {
        return f;
    }

    /**
     * 获取 G 元素
     * @return 返回 G 元素
     */
    public G getG() {
        return g;
    }
    /**
     * 获取 H 元素
     * @return 返回 H 元素
     */
    public H getH() {
        return h;
    }
    /**
     * 获取 I 元素
     * @return 返回 I 元素
     */
    public I getI() {
        return i;
    }

    private Tuple9(A a, B b, C c, D d, E e, F f, G g, H h, I i) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.e = e;
        this.f = f;
        this.g = g;
        this.h = h;
        this.i = i;
    }

    /**
     * 工厂方法创建 Tuple9 类的一个新实例
     * @param a 参数 a
     * @param b 参数 b
     * @param c 参数 c
     * @param d 参数 d
     * @param e 参数 e
     * @param f 参数 f
     * @param g 参数 g
     * @param h 参数 h
     * @param i 参数 i
     * @param <A> 参数类型 A
     * @param <B> 参数类型 B
     * @param <C> 参数类型 C
     * @param <D> 参数类型 D
     * @param <E> 参数类型 E
     * @param <F> 参数类型 F
     * @param <G> 参数类型 G
     * @param <H> 参数类型 H
     * @param <I> 参数类型 I
     * @return 返回 Tuple9 泛型类的一个新实例
     */
    public static <A,B,C,D,E,F,G,H,I>Tuple9 create(A a, B b, C c, D d, E e, F f, G g, H h, I i){
        return new Tuple9(a,b,c,d,e,f,g,h,i);
    }

}
